package com.jml.jdk8.日期;


import java.time.LocalDateTime;
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.junit.Test;

/**
 * @author:jml
 * @date: 2020/3/4 0004 10:38
 * @description：
 */
public class JodaTimeTest {
    @Test
    public void  dateTime(){
        //今天
        DateTime toDay = new DateTime();
        //明天
        DateTime tomorrow = toDay.plus(1);
        //转化为JDK的Date
        Date date = toDay.toDate();
        String toDays = toDay.toString("yyyy-MM-dd");
        System.out.println(toDays);
        System.out.println("-------------------------------------------------");
        //设置为这个月的N号，参数为1就是1号
        DateTime dateTime = toDay.withDayOfMonth(1);
        String dateTimes = dateTime.toString("yyyy-MM-dd");
        System.out.println(dateTimes);

    }

    @Test
    public void  localDate(){
        //LocalDate表示当前时区的日期
        LocalDate localDate = new LocalDate();
        System.out.println(localDate);
        //三个月后，那个月最大的一天或者最小的一天
        LocalDate minLocalDate = localDate.plusMonths(3).dayOfMonth().withMinimumValue();
        LocalDate maxLocalDate = localDate.plusMonths(3).dayOfMonth().withMaximumValue();
        System.out.println(minLocalDate);
        System.out.println(maxLocalDate);
        //计算两年前，第三个月最后一天的日期
        DateTime dateTime = new DateTime();
        //当前日期-减两年-获取到月份-将月份设置为3月-获取3月的最后一天
        DateTime dateTime1 = dateTime.minusYears(2).monthOfYear().setCopy(3).dayOfMonth()
                .withMaximumValue();
        System.out.println(dateTime1);
    }

    /**
     * UTC标准时间：2020-02-08T09:22:25.666Z,不带时区的，绝对时间值
     * 前后端交互最好是传UTC的标准时间
     */
    @Test
    public void utc时间转换(){
        String utcDate="2020-02-08T09:22:25.666Z";
        DateTime parse = DateTime
                .parse(utcDate, DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
        System.out.println(parse.toDate());
    }
    /**
     * UTC标准时间：2020-02-08T09:22:25.666Z
     * 前后端交互最好是传UTC的标准时间
     */

    @Test
    public void dateTime时区时间和UTC时间相互转换(){
        //UTC时间转化为当前时区时间
        DateTime dateTime = new DateTime("2020-02-08T09:22:25.666Z");
        //2020-02-08T17:22:25.666+08:00，+08:00表示UTC转换到东八区
        //因为北京市东8区，加八小时，所以结果是17点
        System.out.println(dateTime.toString());
        System.out.println("-------------------------------------------");
        //当前时区时间转化为标准的UTC时间，会自动减去8小时
        //当前11点会转化为3点
        DateTime dateTime1 = new DateTime(new Date(), DateTimeZone.UTC);
        System.out.println(dateTime1.toString());
        System.out.println("-------------------------------------------");
        //当前时区时间，转化为格式为yyyy-MM-dd HH:mm:ss字符串
        DateTime dateTime2 = new DateTime(new Date());
        String dateTime2s = dateTime2.toString("yyyy-MM-dd HH:mm:ss");
        System.out.println(dateTime2s);
    }

}
